package com.gugu.procedure.util;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class NumberUtil {

    // 特殊编号处理

    /**
     * 1、常规编号 年份+月份+流水号（2211001）
     * 2、出货日期： 年份+月份+日期+流水号
     * 3、常规编号前后加英文字母：（L2211001MD）
     * 4、客户指定编码：前四位-六位数指定+三位流水号
     * 5、 客户代码+（3-4）位数流水号
     */
    public static void main(String[] str) {
        String number = "0MX101010810";
        System.out.println(nextNumber(number));

    }

    public static String nextNumber(String number) {
        StringBuffer prefix = new StringBuffer();
        StringBuffer suffix = new StringBuffer();
        StringBuffer numStr = new StringBuffer();
        boolean prefixAdd = true;
        boolean numAdd = true;
        // 处理纯数字类型
        if (isNum(number)) {
            return (Long.parseLong(number) + 1) + "";
        }
        // 客户指定编码：前四位-六位数指定+三位流水号
        if (number.contains("-") && number.length() > 11) {
            prefix.append(number.substring(0, 11));
            numStr.append(number.substring(11));
            return prefix.append((Long.parseLong(numStr.toString()) + 1) + "").toString();
        }
        // 处理前后带字母
        for (int i = 0; i < number.length(); i++) {
            if ((!isNum(number.substring(i, i + 1)) || "0".equals(number.substring(i, i + 1))) && prefixAdd) {
                prefix.append(number.substring(i, (i + 1)));
                continue;
            } else {
                prefixAdd = false;
            }
            if (isNum(number.substring(i, i + 1)) && numAdd) {
                numStr.append(number.substring(i, i + 1));
                continue;
            } else {
                numAdd = false;
            }
            suffix.append(number.substring(i, i + 1));
        }

        return prefix.append((Long.parseLong(numStr.toString()) + 1) + "").append(suffix).toString();
    }


    public static boolean isNum(String num) {
        if (num == null || "".equals(num)) {
            return false;
        }
        Pattern pattern = Pattern.compile("^\\d+$");
        Matcher isNum = pattern.matcher(num);
        return isNum.matches();
    }
}
